package com.xiaoke.java1;

/**
 * @author yd
 * @version 1.0
 * @date 2022/3/1 23:34
 */
public class StringIntern {

    public static void main(String[] args) {

        String s = new String("1");
        s.intern();//调用此方法之前，字符串常量池中已经存在了"1"
        String s2 = "1";
        System.out.println(s == s2);//jdk6 false jdk7/8 false

        String s3 = new String("1") + new String("1");//s3变量记录的地址为: new String("11")
        //执行完上一行代码后，字符串常量池中是否存在"11"呢？ 答案:不存在
        s3.intern();//在字符串常量池中生成"11" 如何理解: jdk6:创建了一个新的对象"11",也就有了新的地址
                                        //             jdk7:此时常量中并没有创建"11",而是创建了一个指向堆空间的new String("11")的地址

        String  s4 = "11"; //s4变量记录的地址：使用的是上一行代码执行时，在常量池中生成的"11"的地址
        System.out.println(s3 == s4);//jdk6 false jdk7/8 true



    }
}
